import 'dart:convert';
import 'package:pdf_test/utils/utils.dart';

/// fluro 参数编码解码工具类
class FluroConvertUtils {
  /// fluro 传递中文参数前，先转换，fluro 不支持中文传递
  static String fluroCnParamsEncode(String originalCn) {
    Utils.logger.d('页面跳转参数:$originalCn');
    // 替换'&'为转义序列'\u0026' 避免json遇到特殊字符'&'报错
    originalCn = originalCn.replaceAll('&', '\\u0026');
    // 使用encodeComponent替换encodeFull处理特殊字符'/'导致路由跳转错误的问题
    Utils.logger.d('页面跳转参数转码:${Uri.encodeComponent(originalCn)}');
    return Uri.encodeComponent(originalCn);
  }

  /// fluro 传递后取出参数，解析
  static String fluroCnParamsDecode(String encodeCn) {
    Utils.logger.d('页面接受参数:$encodeCn');
    Utils.logger.d('页面跳转参数解码:${Uri.decodeFull(encodeCn)}');
    return Uri.decodeFull(encodeCn);
  }

  /// string 转为 int
  static int string2int(String str) {
    return int.parse(str);
  }

  /// string 转为 double
  static double string2double(String str) {
    return double.parse(str);
  }

  /// string 转为 bool
  static bool string2bool(String str) {
    if (str == 'true') {
      return true;
    } else {
      return false;
    }
  }

  /// object 转为 string json
  static String object2string<T>(T t) {
    return fluroCnParamsEncode(jsonEncode(t));
  }

  /// string json 转为 map
  static Map<String, dynamic> string2map(String str) {
    // 替换'&'为转义序列'\u0026' 避免json遇到特俗字符'&'报错
    str = str.replaceAll('\\u0026', '&');
    Utils.logger.d('jsonStr is: $str');
    return json.decode(str);
  }
}
